#ifndef LINKEDLIST_HPP
#define LINKEDLIST_HPP

#include <iostream>
#include "vector"
#include <fmt/ranges.h>
using namespace std;

template<class T>
struct Node {
    T data;
    Node<T>* next;

    Node(const T &val) : data(val), next(NULL){}
};
template<class T>
class LinkedList {
public:
    LinkedList();
    LinkedList(const std::vector<T> & values);
    ~LinkedList();

    void view();

    void add_front(const T &value);
    
    void add_tail(const T &value);

    void reverse();

private:
    Node<T>* head;
};

template class LinkedList<std::string>;
template class LinkedList<int>;

#endif //LINKEDLIST_HPP